package com.guaoran.solr;

import lombok.extern.slf4j.Slf4j;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.beans.DocumentObjectBinder;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;
import java.util.*;

/**
 * @author : 孤傲然
 * @Description :
 * @date :2018/5/22 21:21
 */
@RestController
@RequestMapping("/solr")
@Slf4j
public class SolrDemoController {
    @Autowired
    private ArticleMapper articleMapper;
    @RequestMapping("/getArticleList")
    public List<ArticleVO> getArticleList(String flag, String key){
        log.info("getArticleList.........start.....");
        List<ArticleVO> list = new ArrayList<>();
        //初始化数据入库
        if("insert".equals(flag)){
            insert();
            return list;
        }
        //创建bean索引
        if ("true".equals(flag)) {
            saveSolrResource();
            return list;
        }
        //使用solr索引查询
        return getBeans(key);
    }

    /**
     * 插入数据到数据库表中
     */
    private void insert(){
        String str =
                "我爱北京天纳闷，习近平指出，上海合作组织成立以来，成员国始终把维护地区安全稳定作为优先方向，拓展合作领域，丰富合作实践，严厉打击“东突”等“三股势力”，积极防范热点问题负面影响扩散外溢，为确保地区长治久安和发展繁荣作出了重要贡献。扩员之后，上海合作组织安全合作潜力更大，肩负的责任更重，承载着地区各国人民和国际社会更多期待。安全会议秘书会议机制要积极适应形势变化，切实履行职责，为成员国维护国家安全和社会稳定提供更有力支持。\n" +
                        "\n" +
                        "习近平强调，当前，本地区安全形势总体稳定，同时仍面临“三股势力”、毒品走私、跨国有组织犯罪等严峻挑战。这需要我们加强忧患意识，冷静思考，准确判断、妥善应对。要把握安全合作战略方向，继续巩固战略互信，加强政策沟通和协调，坚持公平正义，共同推动以政治外交手段和平解决热点问题。要继续秉持共同、综合、合作、可持续安全观，推行综合施策、标本兼治的安全治理模式，推动上海合作组织安全合作迈上新台阶。要加强安全合作行动能力，构建更加严密、健全、高效的执法合作网络，继续推进安全领域合作，共同加强维稳能力建设。\n" +
                        "\n" +
                        "习近平指出，中方将继续把自身安全同地区国家安全融合起来，同成员国携手建设相互尊重、公平正义、合作共赢的新型国际关系，推动构建人类命运共同体。\n" +
                        "\n" +
                        "俄罗斯安全会议秘书帕特鲁舍夫、吉尔吉斯斯坦安全会议秘书萨金巴耶夫代表外方先后发言。他们转达了各国领导人对习近平的亲切问候，感谢习近平对上海合作组织成员国安全合作的高度重视。他们表示，各国支持中国作为上海合作组织主席国为推动落实领导人共识、携手应对成员国面临的共同挑战、维护国际和平与安全提出的倡议。在中方主持下，本次安全会议秘书会议深入探讨了打击恐怖主义、“三股势力”、加强信息安全、维护社会稳定等成员国共同关心的问题，为加强上海合作组织安全领域合作进一步指明了方向，为筹备青岛峰会发挥了重要作用。新形势下，上海合作组织安全合作越发彰显出强大的生命力。各国愿拓展广泛而密切的合作，使上海合作组织在国际事务中发挥更大的作用";
        String[] strs = str.split("，");
        for (long i = 0;i<20L;i++){
            for (int j = 0;j<strs.length;j++) {
                articleMapper.insertArticleByObject(new Article(i,Long.valueOf(strs[j].length()),strs[j],strs[strs.length-j-1]));
            }
        }
        log.info("insert..success");
    }

    /**
     * 转换格式
     * @param article
     * @return
     */
    private ArticleVO convert (Article article){
        ArticleVO vo = new ArticleVO(article.getName(),article.getContent(),UUID.randomUUID().toString());
        return vo;
    }

    /**
     * 创建bean索引
     */
    public void saveSolrResource(){
        List<Article> articles = articleMapper.queryArticle();
        for (Article a: articles ) {
            SolrUtil.saveSolrResource(convert(a));
        }
    }

    /**
     * solr使用关键字进行索引查询
     * @param key
     * @return
     */
    public List<ArticleVO> getBeans(String key){
        List<ArticleVO> articleVOList = new ArrayList<>();
        try {
            QueryResponse response = SolrUtil.query(key);
            articleVOList = response.getBeans(ArticleVO.class);
            System.out.println("list.size="+articleVOList.size());
            return articleVOList;
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return articleVOList;
    }

}
